/* XSLEngine : applique une feuille de style XSLT à un document XLK.
 */

#ifndef _XSL_ENGINE
#define _XSL_ENGINE


#include "XSLStylesheet.h"
#include "../XML/Balise.h"

#include <string>


class XSLEngine
{
public :
	XSLEngine(XSLStylesheet *p_xslStylesheet, Balise *p_xmlDoc);

	/* Appliqye la transformation XSL 
	 * Renvoie true si tout c'est bien passé, false sinon. En cas d'erreur, consulter
	 * le raison de l'erreur avec getErrMsg() */
	bool transformXMLDoc( );

	/* Récupérer le document XML généré, ou NULL si il n'a pas été généré.
	 * Pour générer le document XML transformé par la feuille de style XSLT,
	 * utilisé transformXMLDoc(). */
	Balise* getTransformedXMLDoc( );

	/* Obtenir la raison d'une erreur de la transformation d'un document XML */
	const std::string& getErrMsg() const; 

private :
	XSLStylesheet *xslStylesheet; /* Document XSLT */
	Balise *xmlDoc; /* Document XML original : ne sera pas transformé */
	Balise *transformedXMLDoc; /* Document XML transformé par la feuille de style XSLT */
	
	std::string errMsg; /* Message d'erreur */

private :
	/*
	 * Pour le moment, pour que sa marche, transDoc ne doit pas etre apply-template*/
	void recurTransform(Noeud *orgDoc, Noeud *transDoc);
};


#endif
